Skill Development

ফাইল এবং ডিরেক্টরি ম্যানেজমেন্ট

Ansible-এ ফাইল এবং ডিরেক্টরি ম্যানেজমেন্ট হলো একটি সাধারণ কাজ, যেখানে ফাইল এবং ডিরেক্টরি তৈরি করা, পরিবর্তন করা, কপি করা, মুছে ফেলা, এবং অনুমতি সেট করার জন্য বিভিন্ন মডিউল ব্যবহার করা হয়। Ansible এই ধরনের টাস্ক অটোমেট করতে সহায়ক মডিউল সরবরাহ করে, যেমন: file, copy, template, এবং synchronize। নিচে এই মডিউলগুলোর বিবরণ এবং উদাহরণ দেয়া হলো।

১. file মডিউল

file মডিউল ব্যবহার করে ফাইল এবং ডিরেক্টরি তৈরি, পরিবর্তন, বা মুছে ফেলা যায়। এটি ফাইল এবং ডিরেক্টরির অনুমতি (permission), মালিকানা (ownership), এবং লিঙ্ক (symbolic/soft link) তৈরি করতে ব্যবহৃত হয়।

file মডিউলের সাধারণ সিনট্যাক্স:

- name: Example task using file module
  file:
    path: /path/to/file_or_directory
    state: present/absent/directory/touch/link/hard
    owner: username
    group: groupname
    mode: '0755'

উদাহরণ:

  1. ডিরেক্টরি তৈরি করা:
- name: Create a directory
  file:
    path: /var/www/html
    state: directory
    mode: '0755'
    owner: apache
    group: apache
  1. ফাইল মুছে ফেলা:
- name: Remove a file
  file:
    path: /var/www/html/oldfile.txt
    state: absent
  1. সিম্বলিক লিঙ্ক তৈরি করা:
- name: Create a symbolic link
  file:
    src: /var/www/html
    dest: /var/www/current
    state: link

২. copy মডিউল

copy মডিউল ব্যবহার করে লোকাল সিস্টেম থেকে রিমোট সিস্টেমে ফাইল কপি করা যায়। এটি সাধারণত স্ট্যাটিক কনফিগারেশন ফাইল কপি করতে ব্যবহৃত হয়।

copy মডিউলের সাধারণ সিনট্যাক্স:

- name: Copy a file
  copy:
    src: /path/to/local_file
    dest: /path/to/remote_file
    owner: username
    group: groupname
    mode: '0644'

উদাহরণ:

- name: Copy a configuration file
  copy:
    src: files/nginx.conf
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'

৩. template মডিউল

template মডিউল ব্যবহার করে Jinja2 টেম্পলেট ফাইল থেকে ডায়নামিক কনফিগারেশন ফাইল তৈরি এবং কপি করা যায়। এটি copy মডিউলের মতো, তবে ডায়নামিক ডেটা ও ভ্যারিয়েবল ব্যবহারের মাধ্যমে কনফিগারেশন তৈরি করে।

উদাহরণ:

- name: Deploy a configuration file using template
  template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'

৪. synchronize মডিউল

rsync এর মতো synchronize মডিউল ব্যবহার করে লোকাল এবং রিমোট সিস্টেমের মধ্যে ফাইল এবং ডিরেক্টরির মধ্যে সিঙ্ক্রোনাইজ করা যায়। এটি বড় ডিরেক্টরি বা ডেটা স্থানান্তরের জন্য কার্যকর।

synchronize মডিউলের সাধারণ সিনট্যাক্স:

- name: Synchronize directories
  synchronize:
    src: /local/path
    dest: /remote/path
    delete: yes

উদাহরণ:

- name: Synchronize website files
  synchronize:
    src: /var/www/html/
    dest: /backup/html/
    delete: yes

৫. fetch মডিউল

fetch মডিউল রিমোট সিস্টেম থেকে লোকাল সিস্টেমে ফাইল নিয়ে আসে। এটি লোগ বা কনফিগারেশন ফাইল কপি করার জন্য কার্যকর।

উদাহরণ:

- name: Fetch a log file from remote host
  fetch:
    src: /var/log/nginx/access.log
    dest: /tmp/nginx_logs/
    flat: yes

৬. unarchive মডিউল

unarchive মডিউল রিমোট সিস্টেমে আর্কাইভ ফাইল (যেমন: .zip, .tar.gz) আনজিপ বা আনআর্কাইভ করতে ব্যবহৃত হয়।

উদাহরণ:

- name: Unarchive a tar file
  unarchive:
    src: /path/to/archive.tar.gz
    dest: /var/www/html/
    remote_src: yes

সারাংশ

Ansible-এ ফাইল এবং ডিরেক্টরি ম্যানেজমেন্টের জন্য বিভিন্ন মডিউল ব্যবহার করা যায়:

  • file: ফাইল বা ডিরেক্টরি তৈরি, মুছে ফেলা, বা মালিকানা ও পারমিশন সেট করা।
  • copy: লোকাল সিস্টেম থেকে রিমোটে ফাইল কপি করা।
  • template: Jinja2 টেম্পলেট ব্যবহার করে ডায়নামিক কনফিগারেশন তৈরি করা।
  • synchronize: লোকাল এবং রিমোট সিস্টেমের মধ্যে ডিরেক্টরি সিঙ্ক্রোনাইজ করা।
  • fetch: রিমোট থেকে লোকাল সিস্টেমে ফাইল কপি করা।
  • unarchive: রিমোট সিস্টেমে আর্কাইভ ফাইল আনআর্কাইভ করা।

এই মডিউলগুলোর মাধ্যমে, আপনি সহজেই আপনার ইনফ্রাস্ট্রাকচার এবং সার্ভারের ফাইল ম্যানেজমেন্ট অটোমেট করতে পারবেন। Ansible-এর ফাইল এবং ডিরেক্টরি ম্যানেজমেন্ট মডিউলগুলি ব্যবহার করে প্লেবুক তৈরি করা সহজ এবং কার্যকর হয়।

ফাইল কপি করা (copy মডিউল)

Ansible এ copy মডিউল ব্যবহার করে আপনি লোকাল মেশিন (যেখান থেকে প্লেবুক রান করা হচ্ছে) থেকে একটি ফাইল বা ডিরেক্টরি রিমোট হোস্টে কপি করতে পারেন। এটি একটি সাধারণ এবং সহজ মডিউল যা ফাইল কনফিগারেশন, স্ক্রিপ্ট ডিপ্লয়মেন্ট, বা নির্দিষ্ট টেমপ্লেট কপি করার জন্য ব্যবহৃত হয়।

copy মডিউলের সাধারণ ব্যবহার

copy মডিউল ব্যবহার করার জন্য, আপনি src এবং dest নামের দুটি প্যারামিটার ব্যবহার করেন:

  • src: সোর্স ফাইল বা ডিরেক্টরি যা লোকাল মেশিন থেকে কপি করা হবে।
  • dest: ডেস্টিনেশন পাথ যেখানে রিমোট হোস্টে ফাইল বা ডিরেক্টরি কপি করা হবে।

copy মডিউলের উদাহরণ

---
- name: Copy a file to remote hosts
  hosts: all
  become: yes
  tasks:
    - name: Copy the Apache config file
      copy:
        src: /local/path/to/apache.conf
        dest: /etc/apache2/apache2.conf
        owner: root
        group: root
        mode: '0644'

উপরের প্লেবুকে copy মডিউল ব্যবহার করা হয়েছে /local/path/to/apache.conf ফাইলটি /etc/apache2/apache2.conf পাথে রিমোট হোস্টে কপি করার জন্য। এখানে:

  • src: সোর্স ফাইল যা লোকাল মেশিন থেকে কপি করা হবে।
  • dest: ডেস্টিনেশন পাথ যেখানে ফাইলটি রিমোট হোস্টে কপি হবে।
  • owner: ফাইলের মালিকানা সেট করা হয়েছে root
  • group: ফাইলের গ্রুপ সেট করা হয়েছে root
  • mode: ফাইল পারমিশন সেট করা হয়েছে '0644'

copy মডিউলের অন্যান্য গুরুত্বপূর্ণ প্যারামিটার

  • backup: যদি yes করা হয়, তাহলে Ansible ডেস্টিনেশন ফাইলের একটি ব্যাকআপ কপি রাখবে যদি ফাইলটি আগে থেকেই থাকে। উদাহরণ:
copy:
  src: /path/to/file
  dest: /destination/path
  backup: yes
  • force: ডিফল্টভাবে yes, যার মানে Ansible সোর্স ফাইলের সাথে মিলিয়ে ডেস্টিনেশন ফাইল পরিবর্তন করবে। যদি আপনি ফোর্স করা বন্ধ করতে চান, তাহলে force: no ব্যবহার করতে পারেন।
  • remote_src: যদি আপনি রিমোট হোস্টের একটি ফাইল অন্য পাথে কপি করতে চান, তাহলে remote_src: yes ব্যবহার করতে হবে।
copy:
  src: /path/on/remote/host/file.txt
  dest: /another/path/on/remote/host/file.txt
  remote_src: yes

উদাহরণ ১: ফোল্ডার কপি করা

- name: Copy a directory recursively
  copy:
    src: /local/path/to/directory/
    dest: /remote/path/to/directory/
    mode: '0755'

এখানে src ফোল্ডারটি dest ফোল্ডারে কপি করা হবে রিমোট হোস্টে। এটি রিকার্সিভলি (অর্থাৎ সাব-ডিরেক্টরি এবং ফাইল সহ) কপি করা হবে।

উদাহরণ ২: ব্যাকআপ সহ ফাইল কপি করা

- name: Backup and copy a file
  copy:
    src: /path/to/file.txt
    dest: /etc/config/file.txt
    backup: yes

এখানে, ফাইলটি কপি করার আগে যদি /etc/config/file.txt ফাইলটি থাকে, তাহলে তার একটি ব্যাকআপ তৈরি করা হবে।

সংক্ষেপে

Ansible এ copy মডিউলটি একটি সহজ কিন্তু শক্তিশালী টুল যা লোকার ফাইল বা ডিরেক্টরি রিমোট হোস্টে কপি করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন প্যারামিটার এবং অপশন সহ ব্যবহার করা যায়, যেমন: মালিকানা, পারমিশন, ব্যাকআপ এবং রিমোট সোর্স কপি। এই মডিউল ব্যবহার করে আপনি সহজেই আপনার কনফিগারেশন ফাইল, স্ক্রিপ্ট বা অন্যান্য টেমপ্লেট ফাইল ডিপ্লয় করতে পারেন।

ফাইল এবং ডিরেক্টরি তৈরি করা (file মডিউল)

Ansible এর file মডিউল ব্যবহার করে আপনি ফাইল এবং ডিরেক্টরি তৈরি, মুছা, পারমিশন সেট করা এবং লিঙ্ক তৈরি করার মতো কাজ করতে পারেন। এই মডিউলটি অত্যন্ত ফ্লেক্সিবল এবং এটি বিভিন্ন ফাইল বা ডিরেক্টরি সম্পর্কিত কাজ সম্পাদনের জন্য ব্যবহৃত হয়।

file মডিউলের মূল ব্যবহার

file মডিউলটি সাধারণত নিচের কাজগুলো করার জন্য ব্যবহৃত হয়:

  • ফাইল বা ডিরেক্টরি তৈরি করা।
  • ফাইল বা ডিরেক্টরি মুছে ফেলা।
  • পারমিশন, মালিকানা, এবং গ্রুপ সেট করা।
  • সিম্বলিক বা হার্ড লিঙ্ক তৈরি করা।

file মডিউলের সাধারণ সিনট্যাক্স

- name: File or directory management
  ansible.builtin.file:
    path: /path/to/file_or_directory
    state: touch / directory / absent / link / hard
    owner: username
    group: groupname
    mode: permissions

উদাহরণ: ফাইল এবং ডিরেক্টরি তৈরি করা

১. ফাইল তৈরি করা

---
- name: Create an empty file
  hosts: localhost
  tasks:
    - name: Create a file named example.txt
      ansible.builtin.file:
        path: /tmp/example.txt
        state: touch
        owner: ubuntu
        group: ubuntu
        mode: '0644'

ব্যাখ্যা:

  • path: ফাইলটির পূর্ণ পাথ উল্লেখ করা হয়েছে (এক্ষেত্রে /tmp/example.txt)।
  • state: touch: এটি একটি খালি ফাইল তৈরি করবে। যদি ফাইলটি আগে থেকে থাকে, তাহলে এটি কিছু করবে না।
  • owner এবং group: ফাইলের মালিক এবং গ্রুপ নির্ধারণ করা হয়েছে।
  • mode: ফাইলের পারমিশন সেট করা হয়েছে (এক্ষেত্রে '0644')।

২. ডিরেক্টরি তৈরি করা

---
- name: Create a directory
  hosts: localhost
  tasks:
    - name: Create a directory named /tmp/mydirectory
      ansible.builtin.file:
        path: /tmp/mydirectory
        state: directory
        owner: ubuntu
        group: ubuntu
        mode: '0755'

ব্যাখ্যা:

  • state: directory: এটি একটি ডিরেক্টরি তৈরি করবে। যদি ডিরেক্টরিটি আগে থেকে থাকে, তাহলে এটি কিছু করবে না।
  • মালিকানা এবং পারমিশনও এখানে নির্ধারণ করা হয়েছে।

৩. ফাইল বা ডিরেক্টরি মুছে ফেলা

---
- name: Remove a file or directory
  hosts: localhost
  tasks:
    - name: Remove example.txt file
      ansible.builtin.file:
        path: /tmp/example.txt
        state: absent

    - name: Remove /tmp/mydirectory directory
      ansible.builtin.file:
        path: /tmp/mydirectory
        state: absent

ব্যাখ্যা:

  • state: absent: এটি ফাইল বা ডিরেক্টরি মুছে ফেলবে। যদি ফাইল বা ডিরেক্টরি আগে থেকে না থাকে, তাহলে এটি কিছু করবে না।

৪. সিম্বলিক লিঙ্ক তৈরি করা

---
- name: Create a symbolic link
  hosts: localhost
  tasks:
    - name: Create a symlink from /tmp/symlink.txt to /tmp/example.txt
      ansible.builtin.file:
        src: /tmp/example.txt
        path: /tmp/symlink.txt
        state: link

ব্যাখ্যা:

  • src: লিঙ্কের উৎস ফাইল বা ডিরেক্টরি।
  • path: যেখানে লিঙ্কটি তৈরি করা হবে।
  • state: link: এটি একটি সিম্বলিক লিঙ্ক তৈরি করবে।

৫. ফাইল বা ডিরেক্টরির মালিকানা এবং পারমিশন পরিবর্তন করা

---
- name: Change ownership and permissions
  hosts: localhost
  tasks:
    - name: Change ownership and permissions of /tmp/example.txt
      ansible.builtin.file:
        path: /tmp/example.txt
        owner: ubuntu
        group: ubuntu
        mode: '0644'

ব্যাখ্যা:

  • owner এবং group: ফাইল বা ডিরেক্টরির মালিক এবং গ্রুপ পরিবর্তন করবে।
  • mode: পারমিশন সেট করবে।

file মডিউলের বিভিন্ন স্টেট অপশন

স্টেটবর্ণনা
touchএকটি খালি ফাইল তৈরি করবে বা ফাইলের টাইমস্ট্যাম্প আপডেট করবে।
directoryএকটি নতুন ডিরেক্টরি তৈরি করবে।
absentফাইল বা ডিরেক্টরি মুছে ফেলবে।
linkএকটি সিম্বলিক লিঙ্ক তৈরি করবে।
hardএকটি হার্ড লিঙ্ক তৈরি করবে।

সংক্ষেপে

Ansible এর file মডিউলটি ফাইল এবং ডিরেক্টরি ম্যানেজমেন্টের জন্য একটি শক্তিশালী এবং ফ্লেক্সিবল উপায় প্রদান করে। এর মাধ্যমে আপনি ফাইল এবং ডিরেক্টরি তৈরি, মুছা, পারমিশন ও মালিকানা সেট করতে পারেন। এটি আপনার প্লেবুককে আরও কার্যকর এবং কাস্টমাইজড করে তুলতে সাহায্য করে।

আর্কাইভ এবং আনআর্কাইভ মডিউল

Ansible এ আর্কাইভ (Archive) এবং আনআর্কাইভ (Unarchive) মডিউলগুলো ফাইল বা ডিরেক্টরির সংরক্ষণ এবং পুনরুদ্ধার করার জন্য ব্যবহৃত হয়। এই মডিউলগুলো ব্যবহার করে আপনি সহজেই ফাইল এবং ডিরেক্টরি সংরক্ষণ করতে, সেগুলো আনপ্যাক করতে বা অন্যান্য সার্ভারে এক্সট্র্যাক্ট করতে পারেন। চলুন, প্রতিটি মডিউল সম্পর্কে বিস্তারিত আলোচনা করা যাক।

১. আর্কাইভ মডিউল (Archive Module)

আর্কাইভ মডিউল একটি নির্দিষ্ট ফাইল বা ডিরেক্টরিকে আর্কাইভ ফাইলে (যেমন: .tar, .zip) প্যাক করতে ব্যবহৃত হয়। এটি বিশেষ করে তখন কার্যকরী, যখন আপনি একটি ডিরেক্টরি বা ফাইলের ব্যাকআপ নিতে চান বা একটি কম্প্রেসড ফাইল তৈরি করতে চান।

উদাহরণ: আর্কাইভ মডিউল ব্যবহার

---
- name: Archive files and directories
  hosts: localhost
  tasks:
    - name: Create a tar.gz archive of /var/www/html
      ansible.builtin.archive:
        path: /var/www/html
        dest: /tmp/html_backup.tar.gz
        format: gz

ব্যাখ্যা:

  • path: যে ফাইল বা ডিরেক্টরি আর্কাইভ করতে চান, তার পাথ।
  • dest: আর্কাইভ ফাইল তৈরি হওয়ার পাথ এবং ফাইলের নাম।
  • format: আর্কাইভ ফাইলের ফরম্যাট নির্ধারণ করতে gz, bz2, xz, বা zip ব্যবহার করা যায়।

archive মডিউলের গুরুত্বপূর্ণ প্যারামিটার

  • path: আর্কাইভ করার জন্য উৎস ফাইল বা ডিরেক্টরি।
  • dest: আর্কাইভ ফাইল সংরক্ষণের স্থান এবং নাম।
  • format: আর্কাইভের ফরম্যাট (gz, bz2, xz, zip)।
  • remove: যদি true সেট করা হয়, তাহলে আর্কাইভ তৈরি করার পর উৎস ফাইল বা ডিরেক্টরি মুছে ফেলা হবে।

উদাহরণ: remove প্যারামিটার ব্যবহার করা

- name: Archive and remove the original directory
  hosts: localhost
  tasks:
    - name: Create a compressed archive and remove source
      ansible.builtin.archive:
        path: /var/log/myapp
        dest: /tmp/myapp_logs.tar.gz
        format: gz
        remove: true

ব্যাখ্যা: আর্কাইভ ফাইল তৈরির পর /var/log/myapp ডিরেক্টরিটি মুছে ফেলা হবে।

২. আনআর্কাইভ মডিউল (Unarchive Module)

আনআর্কাইভ মডিউল আর্কাইভ ফাইল (যেমন .tar.gz, .zip) আনপ্যাক করতে ব্যবহৃত হয়। এটি বিশেষ করে ডিপ্লয়মেন্ট বা কোনো ফাইলের কনটেন্ট এক্সট্র্যাক্ট করতে উপযোগী।

উদাহরণ: আনআর্কাইভ মডিউল ব্যবহার

---
- name: Unarchive a file
  hosts: localhost
  tasks:
    - name: Extract the html_backup.tar.gz archive
      ansible.builtin.unarchive:
        src: /tmp/html_backup.tar.gz
        dest: /var/www/html
        remote_src: yes

ব্যাখ্যা:

  • src: আর্কাইভ ফাইলের উৎস পাথ।
  • dest: আর্কাইভ ফাইলটি এক্সট্র্যাক্ট করার গন্তব্যস্থল।
  • remote_src: যদি yes সেট করা হয়, তাহলে এটি মনে করবে যে আর্কাইভ ফাইলটি রিমোট হোস্টে অবস্থিত।

আনআর্কাইভ মডিউলের গুরুত্বপূর্ণ প্যারামিটার

  • src: উৎস আর্কাইভ ফাইল যা আনপ্যাক করতে হবে।
  • dest: এক্সট্র্যাক্ট করা ফাইলের গন্তব্যস্থান।
  • remote_src: আর্কাইভ ফাইলটি রিমোট হোস্টে অবস্থিত কিনা তা নির্দেশ করে (yes/no)।
  • creates: যদি উল্লেখিত ফাইল বা ডিরেক্টরি আগে থেকেই থাকে, তাহলে আনআর্কাইভ মডিউল আর এক্সট্র্যাক্ট করবে না। এটি ইডেম্পোটেন্সি নিশ্চিত করতে ব্যবহার করা হয়।

উদাহরণ: creates প্যারামিটার ব্যবহার করা

- name: Unarchive only if directory does not exist
  hosts: localhost
  tasks:
    - name: Extract the archive if not already extracted
      ansible.builtin.unarchive:
        src: /tmp/html_backup.tar.gz
        dest: /var/www/html
        remote_src: yes
        creates: /var/www/html/index.html

ব্যাখ্যা: যদি /var/www/html/index.html ফাইলটি আগে থেকেই থাকে, তাহলে আনআর্কাইভ মডিউল কিছু করবে না।

আর্কাইভ এবং আনআর্কাইভ একত্রে ব্যবহার

একই প্লেবুকে আর্কাইভ এবং আনআর্কাইভ মডিউল ব্যবহার করে আপনি ফাইলের ব্যাকআপ নিতে এবং তা পুনরুদ্ধার করতে পারেন:

---
- name: Backup and restore example
  hosts: localhost
  tasks:
    - name: Archive the application logs
      ansible.builtin.archive:
        path: /var/log/myapp
        dest: /tmp/myapp_logs_backup.tar.gz
        format: gz

    - name: Unarchive the logs to backup directory
      ansible.builtin.unarchive:
        src: /tmp/myapp_logs_backup.tar.gz
        dest: /backup/logs
        remote_src: yes

সংক্ষেপে

মডিউলবর্ণনা
archiveএকটি ফাইল বা ডিরেক্টরিকে আর্কাইভ ফাইলে প্যাক করে।
unarchiveআর্কাইভ ফাইল আনপ্যাক করে এবং গন্তব্যস্থলে এক্সট্র্যাক্ট করে।

Ansible এর archive এবং unarchive মডিউল ব্যবহার করে সহজেই ফাইল বা ডিরেক্টরি সংরক্ষণ ও পুনরুদ্ধার করতে পারবেন। এটি বিশেষ করে ব্যাকআপ এবং ডিপ্লয়মেন্টের জন্য খুবই কার্যকর।

আরও দেখুন...

Promotion